package com.xigua.字符串;

import java.util.*;

/**
 * @author LiRongHua
 * @Title: ${file_name}
 * @Package ${package_name}
 * @Description: 你现在是一场采用特殊赛制棒球比赛的记录员。
 * 这场比赛由若干回合组成，过去几回合的得分可能会影响以后几回合的得分。比赛开始时，记录是空白的。你会得到一个记录操作的字符串列表 ops，其中 ops[i] 是你需要记录的第 i 项操作，ops 遵循下述规则：
 *整数 x - 表示本回合新获得分数 x
 *"+" - 表示本回合新获得的得分是前两次得分的总和。题目数据保证记录此操作时前面总是存在两个有效的分数。
 *"D" - 表示本回合新获得的得分是前一次得分的两倍。题目数据保证记录此操作时前面总是存在一个有效的分数。
 *"C" - 表示前一次得分无效，将其从记录中移除。题目数据保证记录此操作时前面总是存在一个有效的分数。
 *请你返回记录中所有得分的总和。
 *
 *
 * @date 2022/3/269:24
 */
public class _682_棒球比赛 {

    public static void main(String[] args) {
        String ops[] = new String[]{"5","2","C","D","+"};
        calPoints(ops);
    }

    public static int calPoints(String[] ops) {
        Stack<Integer> grades = new Stack<>();
        int sum = 0;
        for (int i = 0; i < ops.length; i++) {
            if (!"C".equals(ops[i]) && !"D".equals(ops[i]) && !"+".equals(ops[i])){
                Integer grade = Integer.valueOf(ops[i]);
                grades.add(grade);
                sum += grade;
            } else if ("C".equals(ops[i])){
                sum -= grades.pop();
            }else if ("D".equals(ops[i])){
                grades.add(grades.peek()*2);
                sum +=grades.peek();
            }else{
                Integer top = grades.pop();
                Integer pre = grades.peek();
                grades.add(top);
                grades.add(top+pre);
                sum +=top+pre;
            }
        }
        return sum;
    }



}
